// 1. 创建Token管理类(TokenManager)
import 'package:shared_preferences/shared_preferences.dart';

class TokenManager {
// 2. 定义私有属性(_token)和常量(_key)
  String? _token;
  final _key = 'enjoy_token';
// 3. 创建一个全局单例对象
//   a. 使用 _instance 变量来存储类的唯一实例
  static TokenManager? _instance;
//   b. 通过私有构造函数 TokenManager._internal() 确保外部不能直接创建实例
// 这是私有命名构造函数，用于实现单例模式。
// 作用：
// 1. 确保 `TokenManager` 类只能被内部访问和实例化
// 2. 阻止外部通过 `new TokenManager()` 创建实例
  TokenManager._internal();
//   c. factory TokenManager() 工厂方法用于检查 _instance 是否已初始化, 若未初始化则创建实例并赋值，最后返回 _instance!
  factory TokenManager() {
    _instance ??= TokenManager._internal();
    return _instance!;
  }
// 4. 提供init方法用于从本地获取token
  Future<void> init() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    //获取本地存储的token并更新_token【_token用于存储token，_key 为存储的key】
    _token = prefs.getString(_key);
  }

// 5. 提供saveToken方法用于存储token
  Future<void> saveToken(String token) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setString(_key, token);
    _token = token;
  }

// 6. 提供getToken方法用于同步获取token
  String? getToken() {
    return _token;
  }

// 7. 提供removeToken方法用于删除token
  Future<void> removeToken() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.remove(_key);
    _token = null;
  }
}
